//package com.kira.scaffoldmvc.Disruptor;
//
//import com.lmax.disruptor.BlockingWaitStrategy;
//import com.lmax.disruptor.EventFactory;
//import com.lmax.disruptor.EventHandler;
//import com.lmax.disruptor.RingBuffer;
//import com.lmax.disruptor.dsl.Disruptor;
//import com.lmax.disruptor.dsl.ProducerType;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ThreadFactory;
//
//@Component
//public class DataRecordDisruptor {
//
//    // Disruptor 环形缓冲区的大小，可根据需要调整
//    private static final int BUFFER_SIZE = 1024 * 1024;
//
//    // 批量插入的大小，可根据性能测试调整
//    private static final int BATCH_SIZE = 1000;
//
//    private final Disruptor<DataRecordEvent> disruptor;
//
//    private final RingBuffer<DataRecordEvent> ringBuffer;
//
//
//    @Autowired
//    private DataRecordMapper dataRecordMapper;
//
//
//    public DataRecordDisruptor() {
//        // 事件工厂，用于创建 DataRecordEvent 实例
//        EventFactory<DataRecordEvent> factory = DataRecordEvent::new;
//        // 创建线程工厂，使用默认的线程创建机制
//        ThreadFactory threadFactory = Executors.defaultThreadFactory();
//        // 初始化 Disruptor，使用多生产者模式和阻塞等待策略
//        disruptor = new Disruptor<>(factory, BUFFER_SIZE, threadFactory, ProducerType.MULTI, new BlockingWaitStrategy());
//        // 为 Disruptor 注册事件处理器
//        disruptor.handleEventsWith(new DataRecordEventHandler());
//        // 启动 Disruptor
//        ringBuffer = disruptor.start();
//    }
//
//
//    // 发布数据到 Disruptor 的方法
//    public void publish(List<DataRecord> dataRecords) {
//        // 获取环形缓冲区的可用序列范围
//        long sequence = ringBuffer.next(dataRecords.size());
//        try {
//            for (int i = 0; i < dataRecords.size(); i++) {
//                // 将数据存储到环形缓冲区的事件中
//                DataRecordEvent event = ringBuffer.get(sequence + i);
//                event.setDataRecord(dataRecords.get(i));
//            }
//        } finally {
//            // 发布事件
//            ringBuffer.publish(sequence, sequence + dataRecords.size() - 1);
//        }
//    }
//
//
//    // 内部类，作为 Disruptor 的事件对象
//    private static class DataRecordEvent {
//        private DataRecord dataRecord;
//
//        public DataRecord getDataRecord() {
//            return dataRecord;
//        }
//
//        public void setDataRecord(DataRecord dataRecord) {
//            this.dataRecord = dataRecord;
//        }
//    }
//
//
//    // 事件处理器，负责将数据批量插入数据库
//    private class DataRecordEventHandler implements EventHandler<DataRecordEvent> {
//        private final List<DataRecord> batch = new ArrayList<>();
//
//
//        @Override
//        public void onEvent(DataRecordEvent event, long sequence, boolean endOfBatch) {
//            // 将事件中的数据添加到批处理列表中
//            batch.add(event.getDataRecord());
//            // 当达到批处理大小或处理完一批数据时进行插入操作
//            if (batch.size() >= BATCH_SIZE || endOfBatch) {
//                insertBatch(batch);
//                batch.clear();
//            }
//
//            // 尼恩提示： 这里需要改造一下，加上一个结束的空事件
//        }
//
//
//        // 执行批量插入的方法
//        private void insertBatch(List<DataRecord> dataRecords) {
//            try {
//                // 使用 MyBatis-Plus 的批量插入功能
//                dataRecordMapper.insertBatch(dataRecords);
//            } catch (Exception e) {
//                // 异常处理，可添加日志记录等操作
//                e.printStackTrace();
//            }
//        }
//    }
//}